package com.github.tomakehurst.wiremock.admin.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.time.LocalDateTime;

/**
 * 多条件查询 Stub 的请求参数模型
 */
@JsonIgnoreProperties(ignoreUnknown = true) // 忽略未知字段，提高兼容性
public class StubConditionQuery {
    // 文件名（模糊查询，如“订单”匹配“订单1.json”“订单2.json”）
    @JsonProperty("name")
    private String name;

    // 需求ID（模糊查询，如“DEM-2024”匹配“DEM-202405”“DEM-202406”）
    @JsonProperty("demandId")
    private String demandId;

    // 创建人ID（精确查询，如“user-1001”仅匹配创建人为该ID的 Stub）
    @JsonProperty("createUserId")
    private String createUserId;

    // 更新时间（查询 ≥ 该时间的 Stub，格式：yyyy-MM-dd HH:mm:ss）
    @JsonProperty("updatedAt")
    private LocalDateTime updatedAt;

    // 页码（默认1）
    @JsonProperty("pageNum")
    private Integer pageNum = 1;

    // 页大小（默认10，最大100）
    @JsonProperty("pageSize")
    private Integer pageSize = 10;

    // Getter + Setter（省略，需手动生成或用 Lombok）
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getDemandId() { return demandId; }
    public void setDemandId(String demandId) { this.demandId = demandId; }
    public String getCreateUserId() { return createUserId; }
    public void setCreateUserId(String createUserId) { this.createUserId = createUserId; }
    public LocalDateTime getUpdatedAt() { return updatedAt; }
    public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; }
    public Integer getPageNum() { return pageNum; }
    public void setPageNum(Integer pageNum) { this.pageNum = pageNum; }
    public Integer getPageSize() { return pageSize; }
    public void setPageSize(Integer pageSize) { this.pageSize = pageSize; }

    // 参数校验：页大小限制（最大100）、模糊查询参数去空（长度<2视为无效）
    public void validate() {
        // 页大小校验
        if (this.pageSize == null || this.pageSize < 1) {
            this.pageSize = 10;
        }
        if (this.pageSize > 100) {
            this.pageSize = 100;
        }
        // 页码校验
        if (this.pageNum == null || this.pageNum < 1) {
            this.pageNum = 1;
        }
        // 模糊查询参数：空值或长度<2 → 设为null（避免无效筛选）
        if (this.name != null && (this.name.trim().isEmpty() || this.name.length() < 2)) {
            this.name = null;
        }
        if (this.demandId != null && (this.demandId.trim().isEmpty() || this.demandId.length() < 2)) {
            this.demandId = null;
        }
        // 创建人ID：空值或空白 → 设为null
        if (this.createUserId != null && this.createUserId.trim().isEmpty()) {
            this.createUserId = null;
        }
    }
}